package org.example.journal_items.service.impl;

import org.example.journal_items.Entity.Todo;
import org.example.journal_items.UserDao.TodoDao;
import org.example.journal_items.service.TodoService;
import org.example.journal_items.common.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

@Service
public class TodoServiceImpl implements TodoService {

  @Autowired
  private TodoDao todoDao;

  @Override
  public List<Todo> getTodosByUserId(Long userId) {
    return todoDao.findByUserId(userId);
  }

  @Override
  public List<Todo> getTodosByUserIdAndDueDate(Long userId, String dueDate) {
    return todoDao.findByUserIdAndDueDate(userId, dueDate);
  }

  @Override
  public Todo getTodoById(Long id) {
    return todoDao.findById(id);
  }

  @Override
  public Result<Todo> createTodo(Todo todo) {
    todo.setIsCompleted(false);
    todoDao.insertTodo(todo);
    return Result.success(todo);
  }

  @Override
  public Result<Todo> updateTodo(Todo todo) {
    todoDao.updateTodo(todo);
    return Result.success(todo);
  }

  @Override
  public Result<Void> deleteTodo(Long id) {
    todoDao.deleteTodo(id);
    return Result.success(null);
  }

  @Override
  public Result<Todo> toggleTodoStatus(Long id, Boolean isCompleted) {
    todoDao.toggleTodoStatus(id, isCompleted);
    Todo todo = todoDao.findById(id);
    return Result.success(todo);
  }
}